// 英雄相关接口
const express = require("express");
const sqlQuery = require("../utils/db");
const path = require("path")

const Router = express.Router();

// 写业务
// 获取英雄列表接口
/**
 * 1、获取前端传入的英雄名
 * 2、构建sql语句查询数据
 * （判断用户是否传递了英雄名，如果没有传，则读取所有英雄数据返回给前端，如果有传，需要根据英雄名查询数据返回给前端）
 * 3、利用mysql查询数据并返回即可
 * 
 * */
Router.get("/getHeroList", (req, res) => {
    // 获取英雄名字
    let { heroName } = req.query;
    // 构建sql语句
    let sql = `select * from heros`;
    if (heroName) {
        sql += ` where name="${heroName}"`
    }
    // 利用mysql查询数据并返回即可
    sqlQuery(sql, (err, result) => {
        if (err) {
            return res.send({
                msg: err.message,
                code: 500
            })
        }
        res.send({
            code: 200,
            msg: "获取成功！",
            data: result
        })
    })
})

// 上传头像
/**
 * 1、使用multer中间件上传图片，根据文档上传的步骤
 * 
 * 2、上传成功后返回数据给前端
 * */
const multer = require('multer')
// const upload = multer({ dest: 'uploads/' })
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/')
    },
    filename: function (req, file, cb) {
        //  path.extname(file.originalname)获取文件后缀名
        // console.log(55, file);
        const filename = Date.now() + '-' + Math.round(Math.random() * 1E9) + path.extname(file.originalname)
        cb(null, filename)
    }
})

const upload = multer({ storage: storage })

Router.post("/uploadFile", upload.single('file_data'), (req, res) => {
    // console.log(req.file);
    res.send({
        code: 200,
        msg: "头像上传成功",
        src: "/" + req.file.path
    })
})

// 更新英雄数据
/**
 * 1、获取前端传递过来的数据（id必传）
 * 2、判断id是否存在
 * 3、构建sql语句
 * 4、根据构建sql语句更新数据即可（mysql模块）
 * 
 * */
Router.post("/updateHero", (req, res) => {
    // 1、获取数据
    let { id, name, gender, img } = req.body;
    // 2、判断id是否存在
    if (id) {
        // 更新
        // 3、构建sql语句
        let sql = `update heros set `;
        let arr = [];
        if (name) {
            arr.push(`name="${name}"`)
        }
        if (gender) {
            arr.push(`gender="${gender}"`)
        }
        if (img) {
            arr.push(`img="${img}"`)
        }
        sql += arr.join(",") + ` where id="${id}"`;
        // 4、实现更新
        sqlQuery(sql, (err, result) => {
            if (err) {
                return res.send({
                    msg: err.message,
                    code: 500
                })
            }
            res.send({
                msg: "更新成功！",
                code: 200
            })
        })

    } else {
        res.send({
            code: 201,
            msg: "id为必传值，请检查！"
        })
    }
})

// 添加英雄数据
/**
 * 实现添加英雄分析
 * 1、获取前端传递过来的参数
 * 2、判断英雄名是否存在
 * 3、构建sql语句
 * 4、根据sql语句向数据库插入数据完成添加功能
 * 
 * */
Router.post("/addHero", (req, res) => {
    let { name, gender, img } = req.body;
    if (name) {
        // 名字必须存在
        let sql = ` insert into heros(name,gender,img) values("${name}","${gender}","${img}") `;
        sqlQuery(sql, (err, result) => {
            if (err) {
                return res.send({
                    msg: err.message,
                    code: 500
                })
            }
            res.send({
                msg: "新增成功！",
                code: 200
            })
        })
    } else {
        res.send({
            msg: "名字不能为空",
            code: 201
        })
    }
})

// 删除接口 需要配置路由参数
/**
 * 实现步骤
 * 1、获取前端传递过来的英雄id
 * 2、判断id是否存
 * 3、构建sql语句，
 * 4、进行删除操作
 * 
 * */
Router.get("/delHeroById/:id", (req, res) => {
    let { id } = req.params;
    if (id) {
        // id存在，进行删除操作
        let sql = ` delete from heros where id="${id}" `;
        sqlQuery(sql, (err, result) => {
            if (err) {
                res.send({
                    code: 500,
                    msg: err.message
                })
                return
            }
            res.send({
                msg: "删除成功",
                code: 200
            })
        })
    } else {
        res.send({
            msg: "id不能为空！",
            code: 201
        })
    }
})

// 导出
module.exports = Router;
